import pymysql
from dbutils.pooled_db import PooledDB
class Sqlhelper(object):
    def __init__(self):
        self.pool = PooledDB(
        creator = pymysql,
        maxconnections = 5, # 连接池允许的最大连接数 0和None表示不限制连接次数 这里我们最大允许连接数是5个
        mincached=0 , # 初始化时 连接池中至少创建的连接数目 0表示不创建 2表示至少创建两个
        blocking=True, # 连接池没有可用的连接后 他就会阻塞等待 True表示等待 False表示不等待然后报错 报错可以捕获 报错 告诉他一会再来 这是我看了源码之后给你整理出来的
        ping=0, # ping mysql服务端 检查是否服务可用 如 0 = None =never 1 = default = whenever 2=whenever cursor is created 4= when query is executed 7=always
        # 当我们发请求的时候 他会帮我们ping一下数据库看通不通 通了再连接 不同捕获错误 
        # 这样连接池对象就i创建了 创建完就可以用了
        host='127.0.0.1',
        port = 3306,
        user = 'liutao',
        password = 'Root45678!',
        database = 'flask_book_management_system',
        charset='utf8'
        )
    def open(self):
        conn = self.pool.connection()
        cursor = conn.cursor()
        return conn,cursor
    def close(self,cursor,conn):
        cursor.close()
        conn.close()
    def fetchone(self,sql,*args):
        conn,cursor = self.open()
        cursor.execute(sql,args)
        result = cursor.fetchone()
        self.close(cursor,conn)
        return result
    def fetchall(self,sql,*args):
        conn,cursor = self.open()
        cursor.execute(sql,args)
        result = cursor.fetchall()
        self.close(cursor,conn)
        return result
    def exec(self,sql,*args):
        conn,cursor = self.open()
        cursor.execute(sql,args[0])
        conn.commit()
        self.close(cursor,conn)

db = Sqlhelper()
